<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Skornyakov Anatoliy
 * Date: 31.05.13
 * Time: 23:38
 * 
 */

class Zftest_Validate_PhoneNumber extends Zend_Validate_Abstract
{
    const NOT_VALID      = 'notValid';

    const NOT_ALL_PARAM  = 'notAllParam';

    const NOT_DIGITS     = 'notDigits';

    const NOT_VALID_SIZE_COUNTRY = 'notValidSizeCountry';

    const NOT_VALID_SIZE_CITY    = 'notValidSizeCity';

    const NOT_VALID_SIZE_NUMBER  = 'notValidSizeNumber';

    const NOT_VALID_SIZE_MORE    = 'notValidSizeMore';


    private $_countChar = array(
        Zftest_View_Helper_PhoneElement::NAME_COUNTRY => 2,
        Zftest_View_Helper_PhoneElement::NAME_CITY    => 4,
        Zftest_View_Helper_PhoneElement::NAME_NUMBER  => 8,
        Zftest_View_Helper_PhoneElement::NAME_MORE    => 4,
    );

    protected $_messageTemplates = array(
        self::NOT_VALID              => '"%value%" не является номером телефона',
        self::NOT_ALL_PARAM          => 'Все поля номера телефона обязательны',
        self::NOT_DIGITS             => 'Тут должны быть только цифры',
        self::NOT_VALID_SIZE_COUNTRY => 'Длина кода страны должна быть не больше %value%',
        self::NOT_VALID_SIZE_CITY    => 'Длина кода города должна быть не больше %value%',
        self::NOT_VALID_SIZE_NUMBER  => 'Длина номера телефона должна быть не больше %value%',
        self::NOT_VALID_SIZE_MORE    => 'Длина дополнительного номера должна быть не больше %value%',

    );



    public function isValid($value)
    {
        $isValid = true;

        if (is_array($value)) {
            $stringValue = trim(implode('-', $value), '-');
            $this->_setValue($stringValue);

            if (is_null($value[Zftest_View_Helper_PhoneElement::NAME_COUNTRY]) &&
                is_null($value[Zftest_View_Helper_PhoneElement::NAME_CITY]) &&
                is_null($value[Zftest_View_Helper_PhoneElement::NAME_NUMBER]))
            {

            } else {
                $validateDigist = new Zend_Validate_Digits();
                $validateSize   = new Zend_Validate_StringLength();
                foreach ($value as $name => $val) {

                    if ($val != '' && !$validateDigist->isValid($val)) {
                        $isValid = false;
                        $this->_error(self::NOT_DIGITS);
                        continue;
                    }

                    $validateSize->setMax($this->_countChar[$name]);
                    if (!$validateSize->isValid((string)$val)) {
                        $isValid = false;
                        $nameError = 'notValidSize' . ucfirst($name);

                        $this->_error($nameError, $this->_countChar[$name]);
                    }
                }
            }
        }

        return $isValid;
    }
}